#!/bin/sh
# Begin $rc_base/init.d/udev_retry

### BEGIN INIT INFO
# Provides:            udev_retry
# Required-Start:      udev
# Should-Start:        $local_fs
# Required-Stop:
# Should-Stop:
# Default-Start:       S
# Default-Stop:
# Short-Description:   Replays failed uevents and creates additonal devices.
# Description:         Replays any failed uevents that were skipped due to
#                      slow hardware initialization, and creates those needed
#                      device nodes
# X-LFS-Default-Start: S45
# X-LFS-Default-Stop:
# X-LFS-Provided-By:   LFS
### END INIT INFO

. /lib/lsb/init-functions

MESSAGE="Retrying failed uevents, if any..."

case "${1}" in
	start)

                # From Debian: "copy the rules generated before / was mounted
                # read-write":
                for file in /dev/.udev/tmp-rules--*; do
                        dest=${file##*tmp-rules--}
                        [ "$dest" = '*' ] && break
                        cat $file >> /etc/udev/rules.d/$dest
                        rm -f $file
                done

                # Re-trigger the failed uevents in hope they will succeed now
                /sbin/udevadm trigger --retry-failed

		# Now wait for udevd to process the uevents we triggered
		/sbin/udevadm settle
		evaluate_retval standard
		;;

	*)
		echo "Usage ${0} {start}"
		exit 1
		;;
esac

# End $rc_base/init.d/udev_retry
